package com.jiangtai.smartbox.ui

import android.support.v7.widget.GridLayoutManager
import android.util.Log
import com.jiangtai.smartbox.R
import com.jiangtai.smartbox.adapter.BoxAdapter
import com.jiangtai.smartbox.base.BaseActivity
import com.jiangtai.smartbox.bean.BoxBean
import com.jiangtai.smartbox.bean.request.PersonInfoBean
import com.jiangtai.smartbox.constant.Constant
import com.jiangtai.smartbox.event.PutBackEvent
import com.jiangtai.smartbox.event.WriteBoxBean
import com.jiangtai.smartbox.util.Preference
import kotlinx.android.synthetic.main.activity_box_open_success.*
import kotlinx.android.synthetic.main.activity_check_box.rv_box
import org.greenrobot.eventbus.EventBus
import org.litepal.LitePal

/**
 * Created by heCunCun on 2021/5/20
 */
class BoxOpenSuccessActivity : BaseActivity() {
//    private var mSerial: Serial? = null
//    private var mOutputStream: OutputStream? = null
//    private var mInputStream: InputStream? = null
//    private var readThread: ReadThread? = null
    private var list = mutableListOf<BoxBean>()
    private var takeWatch = false //是否是取表
    private var personId = ""//操作人id
    private var watchNum: Int by Preference(Constant.WATCH_NUM, 0)//表的数量
    //private var putBoxId = ""//还表柜子id
  //  private var putSuccess = false
    private val mAdapter by lazy {
        BoxAdapter()
    }

    companion object{
        val TAG  = "BoxOpenSuccessActivity"
    }

    override fun attachLayoutRes(): Int = R.layout.activity_box_open_success

    override fun initData() {
//        for (i in 1..72) {
//            if (i == 3 || i == 7 || i == 11 || i == 15) {
//                if (i < 10) {
//                    list.add(BoxBean("", false, false, false))
//                    list.add(BoxBean("", false, false, false))
//                    list.add(BoxBean("", false, false, false))
//                } else {
//                    list.add(BoxBean("", false, false, false))
//                    list.add(BoxBean("", false, false, false))
//                    list.add(BoxBean("", false, false, false))
//                }
//            }
//            if (i < 10) {
//                list.add(BoxBean("0${i}", false, false, true,"777579616E776569A1A2A3A4A5A6A7A8","测试$i"))
//            } else {
//                list.add(BoxBean("${i}", false, false, true,"777579616E776569A1A2A3A4A5A6A7A8","测试$i"))
//            }
//
//        }

        list =  LitePal.findAll(BoxBean::class.java)
        rv_box.adapter = mAdapter
        personId = intent.extras!!.getString("personId")!!
        takeWatch = intent.extras!!.getBoolean("takeWatch")
        Log.e(TAG,"扫脸成功  personId=$personId")
        if (takeWatch){//取表逻辑
            val find = LitePal.where("personId = ?", personId).find(PersonInfoBean::class.java)
            if (find.isNotEmpty()){
                val person = find[0]
                //1.更新取表人状态
                person.takeState = 1 //更新为已取表
                person.save()
                //2.找到有表的柜子,开柜子,更新柜子状态
                val findBoxs = LitePal.where("empty = ?", "0").find(BoxBean::class.java)
                if (findBoxs.isNotEmpty()){//开启有表的第一柜子,并记录取表人信息,还表时还开此柜子
                    val boxBean =  findBoxs[0]
                    boxBean.empty = true
                    boxBean.personId = personId
                    boxBean.personName = person.name
                    boxBean.save()
                    watchNum--
                    Log.e(TAG,"取表后剩余数量==$watchNum")
                    EventBus.getDefault().post(WriteBoxBean(boxBean))
                    list =  LitePal.findAll(BoxBean::class.java)
                    list[boxBean.id.toInt()-1].isChecked=true
                    mAdapter.setNewData(list)
                    tv_current_num.text = boxBean.boxId
                }
            }
        }else{//还表逻辑
            //查柜子是否记录了此人取表   查到就开柜   清空柜子记录人的信息
            val takedBoxs = LitePal.where("personId = ?", personId).find(BoxBean::class.java)
            if (takedBoxs.isNotEmpty()){
              val emptyBox =  takedBoxs[0]//空柜子
          //    putBoxId = emptyBox.boxId
              tv_current_num.text = emptyBox.boxId
             // openBox(emptyBox,false)
                EventBus.getDefault().post(PutBackEvent(emptyBox))
                list =  LitePal.findAll(BoxBean::class.java)
                list[emptyBox.id.toInt()-1].isChecked=true
                mAdapter.setNewData(list)
              //开完柜子  延时6s判断是否插好腕表   否则继续开柜子
                // checkBoxClose(emptyBox)
            }


        }



    }

//    private fun checkBoxClose(emptyBox:BoxBean){
//        handler.postDelayed(Runnable {
//            searchWatch(emptyBox)
//            handler.postDelayed(Runnable {
//                if (!putSuccess){
//                    ToastUtil.showToast("请将腕表连接好再关好柜门!!!")
//                    openBox(emptyBox,false)
//                    checkBoxClose(emptyBox)
//                }
//            },1000)
//        },5000)
//    }

    override fun initView() {
        rv_box.layoutManager = GridLayoutManager(this, 7)
        //初始化串口
       // initSerial()
    }


//
//    private fun initSerial() {
//        val ret = PosUtil.setRs485Status(0)//接收模式
//        if (ret == 0) {
//            Log.e("sb", "切换接收模式成功")
//
//        } else {
//            Log.e("sb", "切换接收模式失败")
//        }
//        try {
//            if (mSerial == null) {
//                mSerial = Serial("/dev/ttyHSL3", 115200, 0)
//            }
//            if (mOutputStream == null) {
//                mOutputStream = mSerial!!.outputStream
//            }
//            if (mInputStream == null) {
//                mInputStream = mSerial!!.inputStream
//            }
//            if (readThread == null) {
//                readThread = ReadThread()
//                readThread!!.start()
//            }
//        }catch (e: java.lang.Exception){
//            e.printStackTrace()
//        }
//
//    }

//    private fun destroySerial() { //释放资源
//        try {
//            if (readThread != null) {
//                readThread!!.interrupt()
//                readThread = null
//            }
//            if (mOutputStream != null) {
//                mOutputStream!!.close()
//                mOutputStream = null
//            }
//            if (mInputStream != null) {
//                mInputStream!!.close()
//                mInputStream = null
//            }
//            if (mSerial != null) {
//                mSerial!!.close()
//                mSerial = null
//            }
//        } catch (e: java.lang.Exception) {
//            e.printStackTrace()
//        }
//    }

    override fun initListener() {
        mAdapter.setOnItemClickListener { adapter, view, position ->
//            if (isRunning){
//                ToastUtil.showToast("正在开柜请稍等")
//               return@setOnItemClickListener
//            }
//            val boxBean = adapter.data[position] as BoxBean
//            boxBean.isChecked = true
//            mAdapter.notifyItemChanged(position)
//            tv_current_num.text = boxBean.boxId
//            openBox(boxBean,true)
        }
    }

//    private var handler = @SuppressLint("HandlerLeak")
//    object :Handler(){
//        override fun handleMessage(msg: Message?) {
//
//        }
//    }
//    private var isRunning = false

//    private fun openBox(boxBean:BoxBean,writeInfo:Boolean) {
//            isRunning = true
//        val ret1 = PosUtil.setRs485Status(1)//切换成发送模式
//        if (ret1 == 0) {
//            Log.e("sb", "切换发送模式成功(id),personId=${boxBean.personId}")
//            val bytesId = HexUtil.hexStringToByteArray(boxBean.personId)
//            if (writeInfo){
//                //  写ID
//                val bytes3 = byteArrayOf(
//                    0xAB.toByte(),//帧头
//                    0xBA.toByte(),//帧头
//                    boxBean.boxId.toByte(),//addr
//                    0x80.toByte(),//下行反馈  锁状态
//                    0x00.toByte(),//下行反馈  锁状态
//                    0x03.toByte(),//CMD 传输数据
//                    0x14.toByte(),//DATA LENGTH
//                    0x00.toByte(),//DATA LENGTH
//                    0xAA.toByte(),//DATA 开始
//                    0x06.toByte(),
//                    0x02.toByte(),
//                    0x10.toByte(),
//                    0x77.toByte(),//id开始
//                    0x75.toByte(),
//                    0x79.toByte(),
//                    0x61.toByte(),
//                    0x6E.toByte(),
//                    0x77.toByte(),
//                    0x65.toByte(),
//                    0x69.toByte(),
//                    0xA1.toByte(),
//                    0xA2.toByte(),
//                    0xA3.toByte(),
//                    0xA4.toByte(),
//                    0xA5.toByte(),
//                    0xA6.toByte(),
//                    0xA7.toByte(),
//                    0xA8.toByte(),//id结束
//                    0x2D.toByte(),//crc
//                    0xA8.toByte()//crc
//                )
//                System.arraycopy(bytesId,0,bytes3,12,bytesId.size)
//                Log.e("sb","crc = ${HexUtil.getCRC(bytes3.copyOfRange(2, 28))}")
//                val bytesCrc3 =  HexUtil.hexStringToByteArray(HexUtil.getCRC(bytes3.copyOfRange(2, 28)))
//                bytes3[28] = bytesCrc3[0]
//                bytes3[29] = bytesCrc3[1]
//                sendData(bytes3)
//                val ret2 = PosUtil.setRs485Status(0)//切换成接收模式
//                if (ret2==0){
//                    Log.e("sb", "切换接收模式成功(id)")
//                }
//                //发送 人名===============================================================
//
//                val bytesName = boxBean.personName.toByteArray(Charset.forName("gb2312"))
//                //  val bytesName2 = "程飞麟".toByteArray(Charset.forName("gb2312"))
//                //     Log.e("sb","size =${bytesName.size}, ===${HexUtil.formatHexString(bytesName)}")
//                //  Log.e("sb","size =${bytesName2.size}, ===${HexUtil.formatHexString(bytesName2)}")
//                val bytes2 = byteArrayOf(
//                    0xAB.toByte(),//帧头
//                    0xBA.toByte(),//帧头
//                    boxBean.boxId.toByte(),//addr
//                    0x80.toByte(),//下行反馈  锁状态
//                    0x00.toByte(),//下行反馈  锁状态
//                    0x03.toByte(),//CMD  传输数据
//                    0x0F.toByte(),//DATA LENGTH
//                    0x00.toByte(),//DATA LENGTH
//                    0xAA.toByte(),
//                    0x06.toByte(),
//                    0x01.toByte(),
//                    0x06.toByte(),
//                    0x20.toByte(),//人名
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),
//                    0x20.toByte(),//人名
//                    0x1A.toByte(),//crc
//                    0xB6.toByte()//crc
//                )
//                System.arraycopy(bytesName,0,bytes2,12,bytesName.size)
//                Log.e("sb","crc = ${HexUtil.getCRC(bytes2.copyOfRange(2, 23))}")
//                val bytesCrc2 =  HexUtil.hexStringToByteArray(HexUtil.getCRC(bytes2.copyOfRange(2, 23)))
//                bytes2[23] = bytesCrc2[0]
//                bytes2[24] = bytesCrc2[1]
//                handler.postDelayed(Runnable {
//                    val ret3 = PosUtil.setRs485Status(1)//切换成发送模式
//                    if (ret3==0){
//                        Log.e("sb", "切换发送模式成功(人名)")
//                    }
//                    sendData(bytes2)
//                    val ret4 = PosUtil.setRs485Status(0)//切换成接收模式
//                    if (ret4==0){
//                        Log.e("sb", "切换接收模式成功(人名)")
//                    }
//                },500)
//            }
//// 发送开箱指令=====================================
//              val bytes1 = byteArrayOf(
//                  0xAB.toByte(),//帧头
//                  0xBA.toByte(),//帧头
//                  boxBean.boxId.toByte(),//addr
//                  0x00.toByte(),//无应答
//                  0x00.toByte(),//无应答
//                  0x04.toByte(),//CMD 开柜
//                  0x02.toByte(),//data length
//                  0x00.toByte(),//data length
//                  0x01.toByte(),
//                  0xF4.toByte(),
//                  0xA8.toByte(),//crc
//                  0x71.toByte()//crc
//              )
//            //System.arraycopy(bytesId,0,bytes1,12,bytesId.size)
//            Log.e("sb","crc = ${HexUtil.getCRC(bytes1.copyOfRange(2, 10))}")
//            val bytesCrc =  HexUtil.hexStringToByteArray(HexUtil.getCRC(bytes1.copyOfRange(2, 10)))
//            bytes1[10] = bytesCrc[0]
//            bytes1[11] = bytesCrc[1]
//            handler.postDelayed(Runnable {
//                val ret5 = PosUtil.setRs485Status(1)//切换成发送模式
//                if (ret5==0){
//                    Log.e("sb", "切换发送模式成功(开柜)")
//                }
//                sendData(bytes1)
//               val ret6 =  PosUtil.setRs485Status(0)
//                if (ret6==0){
//                    Log.e("sb", "切换接收模式成功(开柜)")
//                }
//                isRunning=false
//            },1000)
//
//        } else {
//            Log.e("sb", "切换发送模式失败")
//        }
//    }

    /**
     * 检查柜子表的数量
     */
//    private fun searchWatch(boxBean: BoxBean) {
//        val ret = PosUtil.setRs485Status(1)//切换成发送模式
//        if (ret == 0) {
//            Log.e("sb", "切换发送模式成功(查柜表状态),boxBeanId=${boxBean.boxId}")
//        } else {
//            Log.e("sb", "切换发送模式失败,personId=${boxBean.boxId}")
//        }
//        val bytes1 = byteArrayOf(
//            0xAB.toByte(),//帧头
//            0xBA.toByte(),//帧头
//            boxBean.boxId.toByte(),//addr
//            0x08.toByte(),//无应答
//            0x00.toByte(),//无应答
//            0x03.toByte(),//CMD 任意
//            0x04.toByte(),//data length
//            0x00.toByte(),//data length
//            0xAA.toByte(),
//            0x00.toByte(),
//            0X12.toByte(),
//            0X34.toByte(),
//            0xA8.toByte(),//crc
//            0x71.toByte()//crc
//        )
//        Log.e("sb", "crc = ${HexUtil.getCRC(bytes1.copyOfRange(2, 12))}")
//        val bytesCrc = HexUtil.hexStringToByteArray(HexUtil.getCRC(bytes1.copyOfRange(2, 12)))
//        bytes1[12] = bytesCrc[0]
//        bytes1[13] = bytesCrc[1]
//        sendData(bytes1)
//        val state = PosUtil.setRs485Status(0)
//        if (state == 0) {
//            Log.e("sb", "切换发送模式成功")
//        }
//    }
//
////    private fun sendData(data: ByteArray) { //发送命令 data
////        try {
////            if (mOutputStream != null) {
////                mOutputStream!!.write(data)
////                Log.e("send","sendData = ${HexUtil.formatHexString(data,true)}")
////            }
////        } catch (e: Exception) {
////            e.printStackTrace()
////        }
////    }
//
//    override fun onDestroy() {
//        super.onDestroy()
//       // destroySerial()
//    }
   // private var sb:StringBuilder=java.lang.StringBuilder()
//    inner class ReadThread : Thread() {
//        override fun run() {
//            super.run()
//            while (!isInterrupted) {
//                var size = 0
//                try {
//                    var buffer: ByteArray? = ByteArray(1024)
//                    if (mInputStream != null) {
//                        size = mInputStream!!.read(buffer)
//                    }
//                    buffer = Arrays.copyOfRange(buffer, 0, size)
//                    val formatHexString = HexUtil.formatHexString(buffer, true)
//                    Log.e("sb", "ReadThread接收数据==$formatHexString")
//                    if (!takeWatch){//还表
//                        if (buffer.size > 12) {
//                            //有表数据返回,直接将表柜状态改成有
//                            if (buffer[10] == 0X12.toByte() && buffer[11] == 0X34.toByte()) {
//                                val index =  buffer[2].toInt()
//                                var boxId = ""
//                                if (index<10){
//                                    boxId="0$index"
//                                }else{
//                                    boxId="$index"
//                                }
//                                Log.e("sb","还表boxId = $boxId")
//                                val boxs = LitePal.where("boxId = ?", boxId).find(BoxBean::class.java)
//                                if (boxs.isNotEmpty()){
//                                    val boxBean = boxs[0]
//                                    val persons = LitePal.where("personId = ?", boxBean.personId)
//                                        .find(PersonInfoBean::class.java)
//                                     if (persons.isNotEmpty()){
//                                         persons[0].takeState = 0
//                                         persons[0].save()
//                                     }
//                                    boxBean.empty = false
//                                    boxBean.personName=""
//                                    boxBean.personId=""
//                                    boxBean.save()
//                                    watchNum++
//                                    putSuccess = true
//
//                                }
//                            }
//                        }
//                    }
//                } catch (e: IOException) {
//                    e.printStackTrace()
//                }
//            }
//        }
//    }
}